package com.autumn.zero.file.storage.application.services;

import com.autumn.zero.file.storage.application.dto.FullFileInput;

import java.util.List;

import com.autumn.zero.file.storage.application.dto.FileInput;
import com.autumn.zero.file.storage.services.IFileAttachmentInformationService;
import com.autumn.zero.file.storage.services.vo.FileAttachmentInformationResponse;

/**
 * 文件上传管理
 * 
 * @author 老码农 2019-03-18 18:20:45
 */
public interface IFileUploadManager {

	/**
	 * 获取文件服务
	 * 
	 * @return
	 */
	IFileAttachmentInformationService getFileService();

	/**
	 * 保存上传文件
	 * 
	 * @param input
	 *            输入
	 * @return
	 */
	FileAttachmentInformationResponse saveUploadFile(FullFileInput input) throws Exception;

	/**
	 * 保存上传文件
	 * 
	 * @param service
	 *            服务
	 * @param input
	 *            输入
	 * @param currentUrlPath
	 *            当前路径
	 * @return
	 * @throws Exception
	 */
	FileAttachmentInformationResponse saveUploadFile(IFileUploadAppService service, FileInput input,
			String currentUrlPath) throws Exception;

	/**
	 * 使用文件
	 * 
	 * @param service
	 *            服务
	 * @param targetId
	 *            目标id
	 * @param fileUploadInput
	 *            上传文件输入
	 * @return
	 */
	List<FileAttachmentInformationResponse> useUploadFiles(IFileUploadAppService service, Long uploadId,
			Object fileUploadInput);

	/**
	 * 加载上传文件输出
	 * 
	 * @param uploadFiles
	 *            上传文件集合
	 * @param fileUploadOutput
	 *            文件上传输出
	 */
	void loadUploadFileOutput(List<FileAttachmentInformationResponse> uploadFiles, Object fileUploadOutput);

	/**
	 * 加载上传文件输出
	 * 
	 * @param service
	 *            服务
	 * @param targetId
	 *            目标id
	 * @param fileUploadOutput
	 *            文件上传输出
	 */
	void loadUploadFileOutput(IFileUploadAppService service, Long targetId, Object fileUploadOutput);

	/**
	 * 删除上传文件
	 * 
	 * @param service
	 *            服务
	 * @param targetId
	 *            目标id
	 */
	void deleteUploadFiles(IFileUploadAppService service, Long targetId);

}
